
#include "logentmgr.h"
#include "../server.h"
#include "../filter.h"

////////////////////////////////////////////////////////////////////////////////
LogEntMgr::~LogEntMgr()
{
    if( _filter )
        delete _filter;
    _filter = 0;
}

////////////////////////////////////////////////////////////////////////////////
opcd LogEntMgr::read_log( net_inout uints& ref, net_in uints max, net_out dynarray<logstream*>& list ) const
{
    SVCLOG::logpointer p( SRVROOTA._log, _filter, ref );

    p.read( list, max );
    ref = p.get_ref();

    return 0;
}

////////////////////////////////////////////////////////////////////////////////
opcd LogEntMgr::add_filter( net_in const FILTER_ENTRY& flt )
{
    if (!_filter)
        _filter = new Filter;

    return _filter->add_filter( flt );
}

////////////////////////////////////////////////////////////////////////////////
opcd LogEntMgr::delete_filter( net_in uint obj, net_in uint fltn )
{
    if (!_filter)
        return ersINVALID_PARAMS;

    return _filter->delete_filter( obj, fltn );
}

////////////////////////////////////////////////////////////////////////////////
opcd LogEntMgr::get_filters( net_in uint obj, net_in uint fltn, net_out dynarray<FILTER_ENTRY>& out ) const
{
    if (!_filter)
        return ersINVALID_PARAMS;

    return _filter->get_filters( obj, fltn, out );
}

////////////////////////////////////////////////////////////////////////////////
opcd LogEntMgr::get_filter_ids( net_in uint obj, net_in uint fltn, net_out dynarray<uint>& out ) const
{
    if (!_filter)
        return ersINVALID_PARAMS;

    return _filter->get_filters( obj, fltn, out );
}

////////////////////////////////////////////////////////////////////////////////
opcd LogEntMgr::get_log_upd( net_out uints* ref ) const
{
    *ref = SRVROOTA._log.msgcount();
    return 0;
}

////////////////////////////////////////////////////////////////////////////////
opcd LogEntMgr::get_tree_info( net_out dynarray<tree_info>& out, net_out uints* ref ) const
{
    return SRVROOTA._objmgr.get_tree_info( out, ref );
}

////////////////////////////////////////////////////////////////////////////////
opcd LogEntMgr::get_tree_info_changes( net_inout uints& ref, net_out dynarray<tree_info>& out ) const
{
    return SRVROOTA._objmgr.get_tree_info_changes( ref, out );
}
